<?php

class Pessoa extends Zend_Db_Table
{
	//protected $_name = 'pessoa';
	protected $_primary = 'id_pessoa';
	protected $cadastroConfiavel;
	protected $nomeFormatado;
	protected $erro_encontrado = false;
	protected $erro;

    protected function setNomeFormatado($nome1, $nome2){
    	$maxChar = 50; /*O nome formatado deve conter até 50 caracteres*/
    	$this->nomeFormatado = StringFormat::nvl($nome1, $nome2);
    	if (strlen($this->nomeFormatado)> $maxChar){
    		$this->nomeFormatado = substr($this->nomeFormatado, 0, stripos($this->nomeFormatado, ' '));	
    	} 
    }	
	
    public function getErrorMsg(){
    	return $this->erro->ds_mensagem;
    }
    
    public function __construct(){
    	$this->consistir();
		parent::__construct();
    	$authNamespace= new Zend_Session_Namespace('Zend_Auth');
    	$this->id_pessoa 		= NULL;
    	$this->nr_telefone 		= NULL;
		$this->nr_celular 		= NULL;
		$this->ds_caixa_postal 	= NULL;
		$this->nr_fax 			= NULL;
		$this->ds_endereco 		= NULL;
		$this->nr_endereco 		= NULL;
		$this->ds_complemento 	= NULL;
		$this->ds_bairro 		= NULL;
		$this->cidade 			= new Cidade;
		$this->estado			= new Estado();
		$this->pais				= new Pais();
		$this->ds_nome 			= NULL;
		$this->id_usuario_exc 	= null;
		$this->dt_exclusao 		= null;
		$this->id_usuario_inc	= $authNamespace->idUsuario;
		$this->dt_inclusao		= date('Y-m-d H:m:s');		
    }

    public function is_validate(){
		$mensagem = new AlertaErro();
		$erro=null;		
		if (
		 ($this->_name=='pessoa_juridica' &&
		 ($this->nr_telefone=="" || $this->ds_endereco=="" || $this->cidade->id_cidade==0 || $this->ds_nome =="" || $this->ds_endereco=="")) ||
		 ($this->_name=='pessoa_fisica' && ($this->ds_nome ==""))){
			$erro=$mensagem->getMessage(5); //Campos de preenchimento obrigatório.		
			$erro['mensagem'] .= ' (Pessoa)';			 	
		}
		return $erro;
    }
    
	public function validar(){
		$this->erro = new AlertaErro();
		if (
		 ($this->_name=='pessoa_juridica' &&
		 ($this->nr_telefone=="" || $this->ds_endereco=="" || $this->cidade->id_cidade==0 || $this->ds_nome =="" || $this->ds_endereco=="")) ||
		 ($this->_name=='pessoa_fisica' && ($this->ds_nome ==""))){
			$this->erro->load(5);  //Campos de preenchimento obrigatório.		
			$this->erro->ds_mensagem .= ' (Pessoa)';	
			$this->erro_encontrado = true;		 	
		}
	}
	
	public function hasError(){
		return $this->erro_encontrado;
	}    
    
    private function consistir(){
		if ($this->cadastroConfiavel==true){
			$this->_name 		= 'pessoa';
		}else{
			$this->_name 	= 'aux_pessoa';
		}
		$this->_primary = 'id_pessoa';
	}
	    
	public function load($id){
		$this->consistir();
		$db = Zend_Registry::get('db');
		$sql= 'select id_pessoa,
					  nr_telefone,
					  nr_celular,
					  ds_caixa_postal,
					  nr_fax,
					  ds_endereco,
					  nr_endereco,
					  ds_complemento,
					  ds_bairro,
					  id_cidade,
					  ds_nome,
					  id_usuario_exc,
					  dt_exclusao,
					  id_usuario_inc,
					  dt_inclusao
				 from '.$this->_name.'
			    where id_pessoa='.$id;
		$row = $db->query($sql)->fetch();
    	$this->id_pessoa 		= $row["id_pessoa"];
    	$this->nr_telefone 		= StringFormat::formatarCampo($row["nr_telefone"], StringFormat::maskFone());
		$this->nr_celular 		= StringFormat::formatarCampo($row["nr_celular"], StringFormat::maskFone());
		$this->ds_caixa_postal 	= $row["ds_caixa_postal"];
		$this->nr_fax 			= StringFormat::formatarCampo($row["nr_fax"], StringFormat::maskFone());
		$this->ds_endereco 		= $row["ds_endereco"];
		$this->nr_endereco 		= $row["nr_endereco"];
		$this->ds_complemento 	= $row["ds_complemento"];
		$this->ds_bairro 		= $row["ds_bairro"];
		$this->ds_nome 			= $row["ds_nome"];
		$this->id_usuario_exc 	= $row["id_usuario_exc"];
		$this->dt_exclusao 		= $row["dt_exclusao"];
		if ($row["id_cidade"]>0){
			$this->cidade->load($row["id_cidade"]);
			$this->estado->load($this->cidade->id_estado);
			$this->pais->load($this->estado->id_pais);
		}
	}

	public function salvar(){
		$this->consistir();
    	$dados = array('id_pessoa'		=>$this->id_pessoa,
				 	   'ds_nome'		=>$this->ds_nome,
					   'id_cidade'		=>$this->cidade->id_cidade,
					   'ds_endereco' 	=>$this->ds_endereco,
					   'nr_endereco'	=>$this->nr_endereco,
    				   'ds_bairro'		=>$this->ds_bairro,
				   	   'ds_complemento'	=>$this->ds_complemento,
				   	   'ds_caixa_postal'=>$this->ds_caixa_postal,
				   	   'nr_telefone'	=>StringFormat::apenasCodigo($this->nr_telefone),
				   	   'nr_celular'		=>StringFormat::apenasCodigo($this->nr_celular),
				   	   'nr_fax'			=>StringFormat::apenasCodigo($this->nr_fax));
    	if ($this->id_pessoa == null){
    		if ($this->dt_inclusao == null){
    			$this->dt_inclusao = date('Y-m-d H:m:s');
    		}
    		array_merge($dados,   array('id_usuario_inc'=>$this->id_usuario_inc, 
    									'dt_inclusao'   =>$this->dt_inclusao));
    									
			$this->id_pessoa = $this->insert($dados);
    	}
    	else {
    		$where = "id_pessoa = " . $this->id_pessoa;
			$this->update($dados, $where);
    	}
		return $this->id_pessoa;
    }

	public function excluir($id, $usuario=null){
    	$this->consistir();
		$where = "id_pessoa=".$id;
    	try {
    		$this->delete($where);
    	} catch (Exception $e) {
    		if ($e->getCode()=='23000'){ // Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
    			$this->dt_exclusao      = date('Y-m-d H:m:s');
    			$this->id_usuario_exc	= $usuario;
    			$dados = array('dt_exclusao'    =>$this->dt_exclusao,
    						   'id_usuario_exc' =>$this->id_usuario_exc);
    			$this->update($dados, $where);
    		}
    	} 		
	}
	
	
}